package com.nbcio.cd.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 文件类型枚举
 *
 * @author nbacheng
 */
@Getter
@AllArgsConstructor
public enum FileTypeEnum {

    /**
     * 图片类型
     */
    IMAGE("image", "图片"),

    /**
     * 文档类型
     */
    DOCUMENT("document", "文档"),

    /**
     * 视频类型
     */
    VIDEO("video", "视频"),

    /**
     * 音频类型
     */
    AUDIO("audio", "音频"),

    /**
     * 压缩包类型
     */
    ARCHIVE("archive", "压缩包"),

    /**
     * 其他类型
     */
    OTHER("other", "其他");

    private final String code;
    private final String info;

    /**
     * 根据文件扩展名获取文件类型
     *
     * @param extension 文件扩展名
     * @return 文件类型
     */
    public static FileTypeEnum getByExtension(String extension) {
        if (extension == null || extension.isEmpty()) {
            return OTHER;
        }
        
        String ext = extension.toLowerCase();
        
        // 图片类型
        if ("jpg".equals(ext) || "jpeg".equals(ext) || "png".equals(ext) || "gif".equals(ext) 
            || "bmp".equals(ext) || "webp".equals(ext) || "svg".equals(ext) || "ico".equals(ext)) {
            return IMAGE;
        }
        
        // 文档类型
        if ("pdf".equals(ext) || "doc".equals(ext) || "docx".equals(ext) || "xls".equals(ext) 
            || "xlsx".equals(ext) || "ppt".equals(ext) || "pptx".equals(ext) || "txt".equals(ext) 
            || "rtf".equals(ext) || "odt".equals(ext) || "ods".equals(ext) || "odp".equals(ext)) {
            return DOCUMENT;
        }
        
        // 视频类型
        if ("mp4".equals(ext) || "avi".equals(ext) || "mov".equals(ext) || "wmv".equals(ext) 
            || "flv".equals(ext) || "mkv".equals(ext) || "webm".equals(ext) || "m4v".equals(ext) 
            || "3gp".equals(ext)) {
            return VIDEO;
        }
        
        // 音频类型
        if ("mp3".equals(ext) || "wav".equals(ext) || "flac".equals(ext) || "aac".equals(ext) 
            || "ogg".equals(ext) || "wma".equals(ext) || "m4a".equals(ext)) {
            return AUDIO;
        }
        
        // 压缩包类型
        if ("zip".equals(ext) || "rar".equals(ext) || "7z".equals(ext) || "tar".equals(ext) 
            || "gz".equals(ext) || "bz2".equals(ext)) {
            return ARCHIVE;
        }
        
        return OTHER;
    }
}
